package 建造者模式.建造者模式实现二;

/**
 * @author wzx
 * @date 2024/8/28 17:00
 * @description: 建造者模式实现二
 *              1、目标类要传入一个builder对象
 *              2、builder类位于目标类的内部，并且使用static修饰
 *              3、builder类对象提供内置各种set方法，注意：set方法的返回值是builder本身
 *              4、builder类提供一个builder方法，实现目标对象的创建
 */
public class RabbitMQClient3 {

    // 私有构造 标类要传入一个builder对象
    private RabbitMQClient3(Builder builder){

    }

    //builder类位于目标类的内部，并且使用static修饰
    public static class Builder{
        // 保证不可变对象的属性密闭性
        String host;
        int port;
        String mode;
        String exchange;
        String queue;
        boolean isDurable;
        int connectionTimeout;

        //builder类对象提供内置各种set方法，注意：set方法的返回值是builder本身
        public Builder setHost(String host) {
            this.host = host;
            return this;
        }

        public Builder setPort(int port) {
            this.port = port;
            return this;
        }

        public Builder setMode(String mode) {
            this.mode = mode;
            return this;
        }

        public Builder setExchange(String exchange) {
            this.exchange = exchange;
            return this;
        }

        public Builder setQueue(String queue) {
            this.queue = queue;
            return this;
        }

        public Builder setDurable(boolean durable) {
            isDurable = durable;
            return this;
        }

        public Builder setConnectionTimeout(int connectionTimeout) {
            this.connectionTimeout = connectionTimeout;
            return this;
        }

        //builder类提供一个builder方法，实现目标对象的创建
        public RabbitMQClient3 build(){
            // todo 各种校验
            return new RabbitMQClient3(this);
        }
    }

    public void sendMessage(String message){
        System.out.println("发送消息......"+ message);
    }
}
